package Logica.Dialogo.Entidad;

import cerimice.ValidarDatos;
import Sistema.Configuracion;
import Persistencia.Definicion.Cliente;
import Persistencia.Fachada.ListaFachada;
import Persistencia.Fachada.ClienteFachada;
import Reportes.PDF.Entidad.ReporteGenerarAgendaClientes;

import java.util.List;
import java.util.logging.Logger;

import com.vaadin.ui.Table;

/* @author cerimice */
public class ClienteLogica
    {
    private ValidarDatos    valida;
    private ListaFachada    lista;
    private ClienteFachada  objFachada;
    private Cliente         entidad;
    
    private String          titulo;
    private String          error;
    
    public ClienteLogica()
        {
        titulo = "Clientes";
        valida      = new ValidarDatos();
        lista       = new ListaFachada();
        objFachada  = new ClienteFachada();
        }
    
    public Table generarTabla(int tipo,String valor,Table tabla) throws Exception
        {
        try
            {
            tabla.removeAllItems();
            List<Cliente> listado = lista.listaCliente(tipo,valor);
            for(Cliente obj:listado)
                {tabla.addItem(new Object[]{obj.getClave(),obj.getNombre(),obj.getPaterno(),obj.getMaterno()},obj.getClave());}
            return tabla;
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public Cliente obtenerObjeto(String clave) throws Exception
        {
        try
            {
            entidad = objFachada.obtener(clave);
            return entidad;
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public boolean agregarObjeto(String nombre, String paterno, String materno, String direccion, String estado, String municipio, String codigoPostal, String telefonoFijo, String telefonoMovil, String email) throws Exception
        {
        try
            {
            if(validarDatos(nombre,paterno,materno,direccion,estado,municipio,codigoPostal,telefonoFijo,telefonoMovil,email))
                {
                if(objFachada.agregar(nombre,paterno,materno,direccion,Integer.parseInt(estado),Integer.parseInt(municipio),codigoPostal,telefonoFijo,telefonoMovil,email))
                    {return true;}
                return false;
                }
            return false;
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public boolean modificarObjeto(String clave, String nombre, String paterno, String materno, String direccion, String estado, String municipio, String codigoPostal, String telefonoFijo, String telefonoMovil, String email) throws Exception
        {
        try
            {
            if(validarDatos(nombre,paterno,materno,direccion,estado,municipio,codigoPostal,telefonoFijo,telefonoMovil,email))
                {
                if(objFachada.modificar(clave,nombre,paterno,materno,direccion,Integer.parseInt(estado),Integer.parseInt(municipio),codigoPostal,telefonoFijo,telefonoMovil,email))
                    {return true;}
                return false;
                }
            return false;
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    private boolean validarDatos(String nombre, String paterno, String materno, String direccion, String estado, String municipio, String codigoPostal, String telefonoFijo, String telefonoMovil, String email) throws Exception
        {
        if(!valida.isCadena(nombre))         {error = "El campo NOMBRE no es valido"; return false;}
        if(!valida.isCadena(paterno))        {error = "El campo APELLIDO PATERNO no es valido"; return false;}
        //if(!valida.isCadena(materno))        {error = "El campo APELLIDO MATERNO no es valido"; return false;}
        //if(!valida.isCadena(direccion))      {error = "El campo DIRECCIÓN no es valido"; return false;}
        if(!valida.isEntero(""+estado))      {error = "El campo ESTADO no es valido"; return false;}
        if(!valida.isEntero(""+municipio))   {error = "El campo MUNICIPIO no es valido"; return false;}
        //if(!valida.isCadena(codigoPostal))   {error = "El campo CODIGO POSTAL no es valido"; return false;}
        if(!valida.isCadena(telefonoFijo))   {error = "El campo TELEFONO FIJO no es valido"; return false;}
        //if(!valida.isCadena(telefonoMovil))  {error = "El campo TELEFONO MOVIL no es valido"; return false;}
        //if(!valida.isEmail(email))           {error = "El campo EMAIL no es valido"; return false;}
        return true;
        }
    
    public List generarListaEstado() throws Exception
        {
        try
            {return lista.listaEstado();}
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public List generarListaMunicipio(String estado) throws Exception
        {
        try
            {
            int edo = Integer.parseInt(estado);
            return lista.listaMunicipio(edo);
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public String getError()
        {return error;}
    
    public String getTitulo()
        {return titulo;}
    
    public ReporteGenerarAgendaClientes reporteGenerarAgendaCliente() throws Exception
        {
        try
            {return new ReporteGenerarAgendaClientes();}
        catch (Exception ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage()); throw ex;}
        }
    }
